package com.bbva.gptf.dto.bean;

import org.springframework.jdbc.core.RowMapper;

import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;


@SuppressWarnings("rawtypes")
public class InstrumentoSimulacionMapper implements RowMapper {

	private static final String CD_CONTRATO = "CD_CONTRATO";
	private static final String NB_CLASIFICACION = "NB_CLASIFICACION";
	private static final String TP_CONTRATO = "TP_CONTRATO";
	private static final String CD_VALOR_BMV = "CD_VALOR_BMV";
	private static final String CD_EMISORA = "CD_EMISORA";
	private static final String CD_SERIE = "CD_SERIE";
	private static final String IM_CA_MONTO = "IM_CA_MONTO";
	private static final String PC_CA_INTEGRACION = "PC_CA_INTEGRACION";
	private static final String NU_CA_DELTA = "NU_CA_DELTA";
	private static final String NU_CA_CONTRIBUCION = "NU_CA_CONTRIBUCION";
	private static final String NU_CA_TASA = "NU_CA_TASA";
	private static final String IM_CA_PRECIO = "IM_CA_PRECIO";
	private static final String CT_CA_TITULO = "CT_CA_TITULO";
	private static final String IM_CA_LIQUIDEZ = "IM_CA_LIQUIDEZ";
	private static final String IM_CA_VAL_CARTERA = "IM_CA_VAL_CARTERA";
	private static final String PC_CA_BENCHMARK = "PC_CA_BENCHMARK";
	private static final String PC_CA_CONBENCHMARK = "PC_CA_CONBENCHMARK";
	private static final String PC_CA_DIFINTEGRA = "PC_CA_DIFINTEGRA";
	private static final String NU_CA_PONDERACION = "NU_CA_PONDERACION";
	private static final String CT_CF_TITULO = "CT_CF_TITULO";
	private static final String IM_CF_PRECIO = "IM_CF_PRECIO";
	private static final String IM_CF_MONTO = "IM_CF_MONTO";
	private static final String IM_CF_LIQUIDEZ = "IM_CF_LIQUIDEZ";
	private static final String PC_CF_INTEGRACION = "PC_CF_INTEGRACION";
	private static final String NU_CF_DELTA = "NU_CF_DELTA";
	private static final String NU_CF_CONTRIBUCION = "NU_CF_CONTRIBUCION";
	private static final String NU_CF_TASA = "NU_CF_TASA";
	private static final String IM_CF_VAL_CARTERA = "IM_CF_VAL_CARTERA";
	private static final String PC_CF_BENCHMARK = "PC_CF_BENCHMARK";
	private static final String PC_CF_CONBENCHMARK = "PC_CF_CONBENCHMARK";
	private static final String PC_CF_DIFINTEGRA = "PC_CF_DIFINTEGRA";
	private static final String NU_CF_PONDERACION = "NU_CF_PONDERACION";
	private static final String IM_CF_MONTO_OPERAR = "IM_CF_MONTO_OPERAR";
	private static final String CD_GRUPO_DELTA = "CD_GRUPO_DELTA";
	private static final String TP_NIVEL = "TP_NIVEL";
	private static final String TP_TENENCIA = "TP_TENENCIA";
	private static final String NB_GRUPO_DELTA = "NB_GRUPO_DELTA";
	private static final String CT_CF_TITULO_OR = "CT_CF_TITULO_OR";
	private static final String IM_CF_MONTO_OR = "IM_CF_MONTO_OR";
	private static final String IM_SALDO_CONTABLE = "IM_SALDO_CONTABLE";
	private static final String IM_PRECIO_SUCIO = "IM_PRECIO_SUCIO";
	private static final String IM_VALOR_NOMINAL = "IM_VALOR_NOMINAL";
	private static final String ST_CALCULAR = "ST_CALCULAR";
	private static final String TP_MERCADO = "TP_MERCADO";
	
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    	InstrumentosSimulacion is = new InstrumentosSimulacion();
    	is.setCdContrato(rs.getLong(CD_CONTRATO));
		is.setNbClasificacion(rs.getString(NB_CLASIFICACION));
		is.setTpContrato(rs.getString(TP_CONTRATO));
		is.setCdValorBmv(rs.getString(CD_VALOR_BMV));
		is.setCdEmisora(rs.getString(CD_EMISORA));
		is.setCdSerie(rs.getString(CD_SERIE));
		is.setImCaMonto(rs.getBigDecimal(IM_CA_MONTO));
		is.setPcCaIntegracion(rs.getBigDecimal(PC_CA_INTEGRACION));
		is.setNuCaDelta(rs.getBigDecimal(NU_CA_DELTA));
		is.setNuCaContribucion(rs.getBigDecimal(NU_CA_CONTRIBUCION));
		is.setNuCaTasa(rs.getBigDecimal(NU_CA_TASA));
		is.setImCaPrecio(rs.getBigDecimal(IM_CA_PRECIO));
		is.setCtCaTitulo(rs.getLong(CT_CA_TITULO));
		is.setImCaLiquidez(rs.getBigDecimal(IM_CA_LIQUIDEZ));
		is.setImCaValCartera(rs.getBigDecimal(IM_CA_VAL_CARTERA));
		is.setPcCaBenchmark(rs.getBigDecimal(PC_CA_BENCHMARK));
		is.setPcCaConbenchmark(rs.getBigDecimal(PC_CA_CONBENCHMARK));
		is.setPcCaDifintegra(rs.getBigDecimal(PC_CA_DIFINTEGRA));
		is.setNuCaPonderacion(rs.getBigDecimal(NU_CA_PONDERACION));
		is.setCtCfTitulo(rs.getLong(CT_CF_TITULO));
		is.setImCfPrecio(rs.getBigDecimal(IM_CF_PRECIO));
		is.setImCfMonto(rs.getBigDecimal(IM_CF_MONTO));
		is.setImCfLiquidez(rs.getBigDecimal(IM_CF_LIQUIDEZ));
		is.setPcCfIntegracion(rs.getBigDecimal(PC_CF_INTEGRACION));
		is.setNuCfDelta(rs.getBigDecimal(NU_CF_DELTA));
		is.setNuCfContribucion(rs.getBigDecimal(NU_CF_CONTRIBUCION));
		is.setNuCfTasa(rs.getBigDecimal(NU_CF_TASA));
		is.setImCfValCartera(rs.getBigDecimal(IM_CF_VAL_CARTERA));
		is.setPcCfBenchmark(rs.getBigDecimal(PC_CF_BENCHMARK));
		is.setPcCfConbenchmark(rs.getBigDecimal(PC_CF_CONBENCHMARK));
		is.setPcCfDifintegra(rs.getBigDecimal(PC_CF_DIFINTEGRA));
		is.setNuCfPonderacion(rs.getBigDecimal(NU_CF_PONDERACION));
		is.setImCfMontoOperar(rs.getBigDecimal(IM_CF_MONTO_OPERAR));
		is.setCdGrupoDelta(rs.getBigDecimal(CD_GRUPO_DELTA));
		is.setTpNivel(rs.getLong(TP_NIVEL));
		is.setTpTenencia(rs.getString(TP_TENENCIA));
		is.setNbGrupoDelta(rs.getString(NB_GRUPO_DELTA));
		is.setCtCfTituloOr(rs.getLong(CT_CF_TITULO_OR));
		is.setImCfMontoOr(rs.getBigDecimal(IM_CF_MONTO_OR));
		is.setImSaldoContable(rs.getBigDecimal(IM_SALDO_CONTABLE));
		is.setImPrecioSucio(rs.getBigDecimal(IM_PRECIO_SUCIO));
		is.setImValorNominal(rs.getBigDecimal(IM_VALOR_NOMINAL));
		is.setImValorNominal(is.getImValorNominal() != null ? is.getImValorNominal() : BigDecimal.ZERO);
		is.setCalcular(rs.getBoolean(ST_CALCULAR));
		is.setImMontoNominal(BigDecimal.ZERO);
		if (is.getTpNivel() == 1L && is.getImValorNominal().compareTo(BigDecimal.ZERO) != 0) {
			is.setImMontoNominal(is.getImValorNominal());
		}
		if (is.getTpNivel() != 1L && is.getImValorNominal().compareTo(BigDecimal.ZERO) != 0
				&& is.getCtCaTitulo() != is.getCtCfTitulo()) {
			is.setImMontoNominal(is.getImValorNominal().multiply(
					BigDecimal.valueOf(is.getCtCfTitulo() - is.getCtCaTitulo())));
		}
		is.setTpMercado(rs.getString(TP_MERCADO));
		
		is.setTitulosOperar(is.getCtCfTitulo() - is.getCtCaTitulo());
		/*
		BigDecimal porcentajeOperar = is.getImCfMontoOperar() != null ? is.getImCfMontoOperar().
				multiply(BigDecimal.valueOf(100D)) : BigDecimal.ZERO;
		porcentajeOperar = porcentajeOperar.divide(is.getImCaValCartera(), 6,
				BigDecimal.ROUND_HALF_UP);
		
		is.setPorcentajeOperar(porcentajeOperar);
		*/
		is.setTitulosOperarOr(is.getTitulosOperar());
		is.setPorcentajeOperarOr(is.getPorcentajeOperar());
				
    	return is;
	}
}

